package com.sztz.result;

import cn.hutool.core.util.StrUtil;
import lombok.Data;

/**
 * 返回结果
 * @author yzy
 * @date 2022/7/9 14:16
 */
@Data
public class BaseResult<T> {
    /**
     * 返回状态码
     */
    private String code;
    /**
     * 返回描述信息
     */
    private String message;
    /**
     * 返回数据
     */
    private T data;

    /**
     * 成功返回数据
     * @param data 需要返回的数据
     * @author yzy
     * @date 2022/7/9 14:16
     */
    public static <T> BaseResult<T> success(T data) {
        BaseResult<T> response= new BaseResult<>();
        response.setCode(ResultEnum.SUCCESS.getCode());
        response.setMessage(ResultEnum.SUCCESS.getMessage());
        response.setData(data);
        return response;
    }
    /**
     *  失败返回
     * @param resultEnum 自定义的响应枚举
     * @author yzy
     * @date 2022/7/9 14:16
     */
    public static <T> BaseResult<T> fail(ResultEnum resultEnum) {
        BaseResult<T> response = new BaseResult<>();
        response.setCode(resultEnum.getCode());
        response.setMessage(resultEnum.getMessage());
        return response;
    }
    /**
     *  失败返回失败信息
     * @param message 失败信息
     * @author yzy
     * @date 2022/7/9 14:16
     */
    public static <T> BaseResult<T> fail(String code,String message) {
        BaseResult<T> response = new BaseResult<>();
        response.setCode(code);
        response.setMessage(message);
        return response;
    }
    /**
     *  失败并返回数据
     * @param resultEnum 自定义的响应枚举
     * @author yzy
     * @date 2022/7/9 14:16
     */
    public static <T> BaseResult<T> fail(ResultEnum resultEnum,T data) {
        BaseResult<T> response = new BaseResult<>();
        response.setCode(resultEnum.getCode());
        response.setMessage(resultEnum.getMessage());
        response.setData(data);
        return response;
    }

    /**
     * 是否成功
     * @author yzy
     * @date 2022/7/9 14:16
     */
    public boolean isOk(){
        return StrUtil.equalsAnyIgnoreCase(this.getCode(),ResultEnum.SUCCESS.getCode());
    }

    /**
     * 是否成功
     * @author yzy
     * @date 2022/7/9 14:16
     */
    public boolean isFail(){
        return !isOk();
    }

}
